package tp.tecnicasdisenio.model.factory;

import tp.tecnicasdisenio.dao.impl.jdbc.AlumnoDao;
import tp.tecnicasdisenio.dao.impl.jdbc.EntregaTpDao;
import tp.tecnicasdisenio.dao.impl.jdbc.GrupoDao;
import tp.tecnicasdisenio.dao.impl.jdbc.MateriaDao;
import tp.tecnicasdisenio.dao.impl.jdbc.TrabajoPracticoDao;
import tp.tecnicasdisenio.model.ReglaInterface;
import tp.tecnicasdisenio.model.accion.AccionEntregarTp;
import tp.tecnicasdisenio.model.parser.ParserTituloEntregaTp;
import tp.tecnicasdisenio.model.regla.ReglaEntregaTp;
import tp.tecnicasdisenio.model.validador.ValidadorEntregaTp;

public class ReglaEntregaTpFactory implements ReglaFactoryInterface {

	public static ReglaEntregaTpFactory instance;
	
	private ReglaEntregaTpFactory(){
	}
	
	public static synchronized ReglaEntregaTpFactory getInstance(){
		if(instance == null){
			instance= new ReglaEntregaTpFactory();
		}
		return instance;
	}

	@Override
	public ReglaInterface crear() {
		ValidadorEntregaTp validadorEntregaTp= new ValidadorEntregaTp();
		validadorEntregaTp.setAlumnoDao(AlumnoDao.getInstance());
		validadorEntregaTp.setMateriaDao(MateriaDao.getInstance());
		validadorEntregaTp.setGrupoDao(GrupoDao.getInstance());
		validadorEntregaTp.setTrabajoPracticoDao(TrabajoPracticoDao.getInstance());
		validadorEntregaTp.setParserTituloEntregaTp(new ParserTituloEntregaTp());
		
		AccionEntregarTp accionEntregarTp= new AccionEntregarTp();
		accionEntregarTp.setAlumnoDao(AlumnoDao.getInstance());
		accionEntregarTp.setMateriaDao(MateriaDao.getInstance());
		accionEntregarTp.setGrupoDao(GrupoDao.getInstance());
		accionEntregarTp.setEntregaTpDao(EntregaTpDao.getInstance());
		accionEntregarTp.setTrabajoPracticoDao(TrabajoPracticoDao.getInstance());
		accionEntregarTp.setParserTituloEntregaTp(new ParserTituloEntregaTp());
		accionEntregarTp.setValidadorEntregaTp(validadorEntregaTp);
		
		ReglaEntregaTp reglaEntregaTp= new ReglaEntregaTp();
		reglaEntregaTp.setParserTitulo(new ParserTituloEntregaTp());
		reglaEntregaTp.nuevaAccion(accionEntregarTp);
		
		return reglaEntregaTp;
	}

}
